package com.caregiver.watch.business.care.dao;

import com.caregiver.watch.business.care.model.po.FenceSetting;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalTime;
import java.util.List;

/**
 * 围栏设置数据访问接口
 */
@Mapper
public interface FenceSettingDao {
    
    /**
     * 插入新的围栏设置记录
     * @param fenceSetting 围栏设置信息
     * @return 影响行数
     */
    int insert(FenceSetting fenceSetting);
    
    /**
     * 根据ID更新围栏设置记录
     * @param fenceSetting 围栏设置信息
     * @return 影响行数
     */
    int updateById(FenceSetting fenceSetting);
    
    /**
     * 根据ID删除围栏设置记录
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(@Param("userId") Long userId , @Param("id") Long id);
    
    /**
     * 根据ID查询围栏设置记录
     * @param id 主键ID
     * @return 围栏设置记录
     */
    FenceSetting selectById(@Param("userId") Long userId , @Param("id") Long id);
    
    /**
     * 根据用户ID查询所有围栏设置记录
     * @param userId 用户ID
     * @return 围栏设置记录列表
     */
    List<FenceSetting> selectByUserId(@Param("userId") Long userId);
    
    /**
     * 查询当前时间生效的围栏设置
     * @param userId 用户ID
     * @param deviceId 设备ID
     * @return 围栏设置记录列表
     */
    FenceSetting queryCurrentTimeEnabled(@Param("userId") Long userId,
                                               @Param("deviceId") String deviceId,
                                               @Param("currentTime")LocalTime currentTime);
    
    /**
     * 查询所有启用的围栏设置记录
     * @return 围栏设置记录列表
     */
    List<FenceSetting> selectAllEnabled();
    
    /**
     * 查询所有围栏设置记录
     * @return 围栏设置记录列表
     */
    List<FenceSetting> selectAll();

    /**
     * 根据ID判断围栏设置记录是否存在
     * @param userId 用户ID
     * @param id 围栏ID
     * @return 是否存在
     */
    Boolean existById(@Param("userId") Long userId , @Param("id") Long id);
}
